package br.com.iqt.util;

import br.com.iqt.ConnectionDbms;
import br.com.iqt.Dbms;
import br.com.iqt.zql.ZFromItem;
import java.sql.SQLException;
import java.util.Vector;

/**
 *
 * @author Arlino
 */
public class DatabaseFunctions {
    
    /**
     * Verifica se uma coluna possui índice em de alguma das tabelas do vetor 
     * <b>tables</b>.
     * @param tables
     * Vetor de ZFromItem instanciado com tabela(s) onde irá ser verifado a presença
     * da chave-primária <b>column</b>.
     * @param column
     * String com o nome da coluna que será a existencia de índice em 
     * alguma das tabelas do vetor <b>tables</b>.
     * @return
     * Retorna <i>true</i> se econtrar  a chave-primária em alguma das tabelas e 
     * <i>false</i> calso contrário.
     *//*
    public static final boolean isColumnWithIndex(Dbms dbms, Vector tables, String column){
        for (Object object : tables) {
            ZFromItem fi = (ZFromItem) object;
            String table = fi.getTable();
            String scheme = fi.getSchema();
            boolean result = ConnectionDbms.isIndex(dbms, scheme, table, column);
            if(result)
                return true;
        }
        return false;
    }
    
    /**
     * Verifica se uma coluna é uma chave-primária de alguma das tabelas do vetor 
     * <b>tables</b>.
     * @param tables
     * Vetor de ZFromItem instanciado com tabela(s) onde irá ser verifado a presença
     * da chave-primária <b>column</b>.
     * @param column
     * String com o nome da coluna que será verificada como chave-primária de alguma 
     * das tabelas do vetor <b>tables</b>.
     * @return
     * Retorna <i>true</i> se econtrar  a chave-primária em alguma das tabelas e 
     * <i>false</i> caso contrário.
     *
    public static final boolean isPrimaryKey(Dbms dbms, Vector tables, String column) throws ClassNotFoundException, SQLException{
        for (Object object : tables) {
            ZFromItem fi = (ZFromItem) object;
            String table = fi.getTable();
            String scheme = fi.getSchema();
            boolean result = ConnectionDbms.isPrimaryKey(dbms, scheme, table, column);
            
            if(result)
                return true;
        }
        return false;
    }
    */
    /*
    public static ZFromItem hasForingkeyFromTable1InTabel2(Dbms dbms, ZFromItem table, Vector from, String column) throws ClassNotFoundException, SQLException{
        for (Object obj : from) {
            ZFromItem tb = (ZFromItem) obj;
            
            String schema1 = table.getSchema();
            if(schema1 == null)
                schema1 = "";
            String table1 = table.getTable();
            String schema2 = tb.getSchema();
            if(schema2 == null)
                schema1 = "";
            String table2 = tb.getTable();
            
            if(!table1.equalsIgnoreCase(table2) || schema1.equalsIgnoreCase(schema2)){
                boolean result = ConnectionDbms.hasForingkeyFromTable1InTabel2(dbms, schema1, table1, schema2, table2, column);
                if(result){
                    //System.out.println(tb.toString());
                    return tb;
                }
            }
        }
        return null;
    }
    
    /**
     * Retorna a tabela a que uma chave-primaria pertence.
     * <b>tables</b>.
     * @param tables
     * Vetor de ZFromItem instanciado com tabela(s) onde irá ser verifado a presença
     * da chave-primária <b>column</b>.
     * @param key
     * String com o nome da coluna que será verificada como chave-primária de alguma 
     * das tabelas do vetor <b>tables</b>.
     * @return
     * Retorna o nome da tabela se econtrar  a chave-primária em alguma das tabelas e 
     * <i>null</i> caso contrário. Se key não for uma chave-primária retorna null.
     *//*
    public static ZFromItem getTableFromKey(Dbms dbms, Vector tables, String key) throws ClassNotFoundException, SQLException{
        for (Object object : tables) {
            ZFromItem fi = (ZFromItem) object;
            String table = fi.getTable();
            String scheme = fi.getSchema();
            boolean result = ConnectionDbms.isPrimaryKey(dbms, scheme, table, key);
            
            if(result)
                return fi;
        }
        return null;
    }
    
    /**
     * @param column
     * String com o nome da coluna que será verificada seu tipo.
     * @param tables
     * Vetor de ZFromItem instanciado com a(s) tabela(s) onde irá ser verifado a presença
     * da coluna <b>column</b>.
     * @return
     * Retorna o tipo da coluna <b>column</b>.
     */
    public static final String getType(String column, Vector tables){
        return "SMALLINT";
    }
}
